package br.com.dataphonebr;

import java.text.ParseException;
import java.util.List;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RatingBar;
import android.widget.Spinner;
import br.com.dataphonebr.entity.Atividade;
import br.com.dataphonebr.entity.Grupo;
import br.com.dataphonebr.enumerator.Prioridade;
import br.com.dataphonebr.enumerator.StatusAtividade;
import br.com.dataphonebr.selectListener.DatePickerFragment;
import br.com.dataphonebr.selectListener.DatePickerFragment.TypeDatePicker;
import br.com.dataphonebr.selectListener.GrupoSelectedListener;
import br.com.dataphonebr.selectListener.StatusSelectedListener;
import br.com.dataphonebr.service.AtividadeService;
import br.com.dataphonebr.service.GrupoService;
import br.com.dataphonebr.util.Util;

public class SearchAdmActivity extends GenericActivity<Atividade> {
	
	private StatusSelectedListener statusListener = new StatusSelectedListener(this);
	private GrupoSelectedListener grupoListener = new GrupoSelectedListener(this);
	private GrupoService grupoService;
	private Spinner grupoSpin;
	private Spinner statusSpin;
	private EditText tituloEdt;
	private EditText dataInicioEdt; 
	private EditText dataFimEdt; 
	private Button btnDataInicio;
	private Button btnDataFim;
	private RatingBar prioridadeRb;

	public SearchAdmActivity() {
		super(Atividade.class);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_search_adm);
		getActionBar().setDisplayHomeAsUpEnabled(true);
		init();
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.search_adm, menu);
		return true;
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		showProgressBar(SearchAdmActivity.this, null);
		switch (item.getItemId()) {
	    case R.id.addSearchAdmActionMenu:
			List<Grupo> grupos = grupoService.selectAll();
			if (grupos != null && !grupos.isEmpty()){
				Intent intent = new Intent(SearchAdmActivity.this, AppointmentActivity.class);
				intent.putExtra(Util.COMING_FROM, R.layout.activity_search_adm);
				startActivity(intent);
				finish();
				return true;
	    	} 
	        util.showToastMessageLong(getString(R.string.msg_no_group_registered), this);
	        return false;
	    case android.R.id.home:
	    	Intent intent = new Intent(this, AdministratorListActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);	    
            finish();
	    	return true;
	    default:
	        return super.onOptionsItemSelected(item);
	    }
	}
	
	@Override
	public void init(){
//		atividadeService = new AtividadeService(this);
		grupoService = new GrupoService(this);
		super.init();
	}

	public void pesquisar(View v){
		showProgressBar(SearchAdmActivity.this, null);
		Atividade atividade = new Atividade();
		Grupo grupo = new Grupo();
		grupo = (Grupo)this.grupoSpin.getSelectedItem();
		atividade.setGrupo(grupo);
		atividade.setTitulo(tituloEdt.getText().toString());
		try {
			atividade.setDataIni(util.stringToDate(dataInicioEdt.getText().toString()));
			atividade.setDataFim((util.stringToDate(dataFimEdt.getText().toString())));
		} catch (ParseException e) {
		e.printStackTrace();
		}
		atividade.setStatus(StatusAtividade.getStatusAtividadeByIndex(statusSpin.getSelectedItemPosition()));
		atividade.setPrioridade(Prioridade.getPrioridadeByIndex(prioridadeRb.getProgress()));
		Intent intent = new Intent(this, ResultSearchAdmActivity.class);
		intent.putExtra("grupo", atividade.getGrupo()!=null?atividade.getGrupo().getCodigo():null);
		intent.putExtra("titulo", atividade.getTitulo());
		intent.putExtra("dataInicial", atividade.getDataIni()!=null?atividade.getDataIni():null);
		intent.putExtra("dataFinal", atividade.getDataFim()!=null?atividade.getDataFim():null);
		intent.putExtra("status", atividade.getStatus()!=null?atividade.getStatus().ordinal():null);
		intent.putExtra("prioridade", atividade.getPrioridade()!=null?atividade.getPrioridade().ordinal():null);
		startActivity(intent);
	}
	
	@Override
	public void prepareComponents() {
		grupoSpin =  (Spinner) findViewById(R.id.grupoSpinnerSearchId);
		statusSpin =  (Spinner) findViewById(R.id.statusSpinnerSearchId);
		tituloEdt = (EditText) findViewById(R.id.editTituloSearchId);
		editHidden(tituloEdt);
		dataInicioEdt = (EditText) findViewById(R.id.dataIniEditSearchId);
		dataInicioEdt.setFocusable(false);
		dataFimEdt = (EditText) findViewById(R.id.dataFimEditSearchId);
		dataFimEdt.setFocusable(false);
		btnDataInicio = (Button) findViewById(R.id.dataIniPickerSearchBtn);
		btnDataInicio.setOnClickListener(dateClick);
		btnDataFim = (Button) findViewById(R.id.dataFimPickerSearchBtn);
		btnDataFim.setOnClickListener(dateClick);
		prioridadeRb = (RatingBar) findViewById(R.id.prioridadeRatingBarSearchId);
		super.prepareComponents();
	}
	
	@Override
	public void prepareList() {
		grupoListener.createAdapter(grupoService.selectAll(), grupoSpin, true);
		statusListener.createAdapter(StatusAtividade.values(), statusSpin);
		super.prepareList();
	}
	
//	  AdapterView.OnItemSelectedListener onItemSelectedSpinner = new AdapterView.OnItemSelectedListener() {
//		@Override
//		public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
//			switch (view.getId()){
//				case R.id.grupoLblSearchId : {
//					Grupo grupo = (Grupo) parent.getItemAtPosition(pos);
//				}
//				break;
//				case R.id.statusSpinnerSearchId : {
//					StatusAtividade status = (StatusAtividade) parent.getItemAtPosition(pos);
//				}
//				break;
//			}
//		}
//
//		@Override
//		public void onNothingSelected(AdapterView<?> arg0) {
//		}
//	  };
	  
		View.OnClickListener dateClick = new View.OnClickListener() {
			DatePickerFragment datePicker = new DatePickerFragment(SearchAdmActivity.this);
		    public void onClick(View v) {
		    	switch (v.getId()){
			    	case R.id.dataIniPickerSearchBtn : {
			    		datePicker.setType(TypeDatePicker.DATE);
			    		datePicker.setField(dataInicioEdt);
			    		datePicker.showDatePickerDialog(getFragmentManager());
			    	}
			    	break;
			    	case R.id.dataFimPickerSearchBtn : {
			    		datePicker.setType(TypeDatePicker.DATE);
			    		datePicker.setField(dataFimEdt);
			    		datePicker.showDatePickerDialog(getFragmentManager());
			    	}
			    	break;
		    	}
		    }
		  };
}
